package com.third.device.mg.serialport.factory.lemanli.product

import com.third.device.mg.serialport.factory.lemanli.BaseLeManLiProduct

/**
 * @Date 2022/1/20
 * Description:
 * 风琴帘
 * 蜂巢帘
 */
class CurtainAccordion : BaseLeManLiProduct() {

    override fun productDescribe(): String = "乐满利厂家--风琴帘(蜂巢帘)"


    private fun groupControl(groupId: Int, action: Byte): ByteArray {
        val command = ByteArray(6)
        command[0] = 0x9a.toByte()
        command[1] = groupId.toByte()
        command[2] = 0x01.toByte()
        command[3] = 0x00.toByte()
        command[4] = TYPE_CONTROL_COMMAND.toByte()
        command[5] = action
        return command
    }

    /**
     * 所有风琴帘合上 --- 到达上限位(帘是关闭的，但窗是打开的)
     */
    fun groupToUP(groupId: Int): ByteArray {
        val command = groupControl(groupId, ACTION_UP.toByte())
        return commandCheckout(command)
    }


    /**
     * 所有风琴帘停止
     */
    fun groupToStop(groupId: Int): ByteArray {
        val command = groupControl(groupId, ACTION_STOP.toByte())
        return commandCheckout(command)
    }


    /**
     * 所有风琴帘展开 --- 到达下限位(帘是展开的，但窗是关闭的)
     */
    fun groupToDown(groupId: Int): ByteArray {
        val command = groupControl(groupId, ACTION_DOWN.toByte())
        return commandCheckout(command)
    }

    /**
     * 上行指令
     * @param id 设备id
     */
    fun toUp(id: Byte): ByteArray{
        val command = byteArrayOf(
            0x9a.toByte() ,
            id ,
            0x80.toByte(),
            0 ,
            TYPE_CONTROL_COMMAND.toByte() ,
            0xdd.toByte()
        )
        return commandCheckout(command)
    }


    /**
     * 停止指令
     * @param id 设备id
     */
    fun toStop(id: Byte): ByteArray{
        val command = byteArrayOf(
            0x9a.toByte() ,
            id ,
            0x80.toByte(),
            0 ,
            TYPE_CONTROL_COMMAND.toByte() ,
            0xCC.toByte()
        )
        return commandCheckout(command)
    }

    /**
     * 下行指令
     * @param id 设备id
     */
    fun toDown(id: Byte): ByteArray{
        val command = byteArrayOf(
            0x9a.toByte() ,
            id ,
            0x80.toByte(),
            0 ,
            TYPE_CONTROL_COMMAND.toByte() ,
            0xEE.toByte()
        )
        return commandCheckout(command)
    }

    /**
     * 查询状态
     * (ID对应才返回数据)
     */
    fun queryStateFromId(id: Byte)  : ByteArray{
        val command = byteArrayOf(
            0x9a.toByte() ,
            id ,
            0x80.toByte(),
            0 ,
            TYPE_QUERY_STATE.toByte() ,
            0
        )
        return commandCheckout(command)
    }

    /**
     * 查询状态
     * (不管ID，直接返回数据)
     */
    fun queryState() : ByteArray{
        val command :ByteArray = byteArrayOf(0x9A.toByte(),
            0x00 ,
            0x00 ,
            0x00 ,
            TYPE_QUERY_STATE.toByte(),
            0xCC.toByte())
        return commandCheckout(command)
    }


    /**
     * 设置设备ID
     * 设置成功后，电机会正反转动一下
     */
    fun setDeviceID(id: Byte): ByteArray{
        val command :ByteArray = byteArrayOf(
            0x9A.toByte(),
            id ,
            0x80.toByte() ,
            0x00 ,
            TYPE_SETTING_ID.toByte(),
            0xAA.toByte())
        return commandCheckout(command)
    }

    /**
     * 指定设备运行到指定位置
     */
    fun runToValue(id: Byte ,percent:Int): ByteArray{
        val command :ByteArray = byteArrayOf(
            0x9A.toByte(),
            id ,
            0x80.toByte() ,
            0x00 ,
            TYPE_RUN_LOCATION.toByte(),
            percent.toByte())
        return commandCheckout(command)
    }


    /**
     * 设置上限位
     */
    @Deprecated("暂时不支持指令设置")
    fun setUpLimit(id: Byte): ByteArray{
        val command :ByteArray = byteArrayOf(
            0x9A.toByte(),
            id ,
            0x00 ,
            0x00 ,
            TYPE_SETTING_POINT.toByte(),
            0xdd.toByte())
        return commandCheckout(command)
    }

    /**
     * 设置中间限位
     */
    @Deprecated("暂时不支持指令设置")
    fun setCenterLimit(id: Byte): ByteArray{
        val command :ByteArray = byteArrayOf(
            0x9A.toByte(),
            id ,
            0x00 ,
            0x00 ,
            TYPE_SETTING_POINT.toByte(),
            0xCC.toByte())
        return commandCheckout(command)
    }

    /**
     * 设置下限位
     */
    @Deprecated("暂时不支持指令设置")
    fun setDownLimit(id: Byte): ByteArray{
        val command :ByteArray = byteArrayOf(
            0x9A.toByte(),
            id ,
            0x00 ,
            0x00 ,
            TYPE_SETTING_POINT.toByte(),
            0xEE.toByte())
        return commandCheckout(command)
    }

    /**
     * 保存限位点
     */
    @Deprecated("暂时不支持指令设置")
    fun saveLimit(id: Byte):ByteArray{
        val command :ByteArray = byteArrayOf(
            0x9A.toByte(),
            id ,
            0x00 ,
            0x00 ,
            TYPE_SETTING_POINT.toByte(),
            0xAA.toByte())
        return commandCheckout(command)
    }
}